From 53c297436d2528440a996ac607a2c6f4f5657b00 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Fri, 31 Mar 2017 16:49:22 +0200 Subject: [PATCH] gtk: Add private _gtk_toplevel_pick() method This function returns both the widget at the given toplevel coordinates, and the translated x/y in widget relative coordinates. --- gtk/gtkmain.c | 23 +++++++++++++++++++++++ gtk/gtkprivate.h | 5 +++++ 2 files changed, 28 insertions(+) diff --git a/gtk/gtkmain.c b/gtk/gtkmain.c index b145f0063d..70b143938c 100644 --- a/gtk/gtkmain.c +++ b/gtk/gtkmain.c @@ -2304,3 +2304,26 @@ _gtk_propagate_captured_event (GtkWidget *widget, { return propagate_event (widget, event, TRUE, topmost); } + +GtkWidget * +_gtk_toplevel_pick (GtkWindow *toplevel, + gdouble x, + gdouble y, + gdouble *x_out, + gdouble *y_out) +{ + GtkWidget *target = NULL, *widget = GTK_WIDGET (toplevel); + + while (widget) + { + target = widget; + widget = GTK_WIDGET_GET_CLASS (target)->pick (widget, x, y, &x, &y); + } + + if (x_out) + *x_out = x; + if (y_out) + *y_out = y; + + return target; +} diff --git a/gtk/gtkprivate.h b/gtk/gtkprivate.h index de26e9ff89..21de4862e2 100644 --- a/gtk/gtkprivate.h +++ b/gtk/gtkprivate.h @@ -91,6 +91,11 @@ gboolean _gtk_propagate_captured_event (GtkWidget *widget, GdkEvent *event, GtkWidget *topmost); +GtkWidget * _gtk_toplevel_pick (GtkWindow *toplevel, + gdouble x, + gdouble y, + gdouble *x_out, + gdouble *y_out); gdouble _gtk_get_slowdown (void); void _gtk_set_slowdown (gdouble slowdown_factor); -- 2.30.2